package com.suning.sawp.intf.bi;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface BiKafkaRealTimeSaleService {
    
    /**
     * 
     * 功能描述: 处理kafka实时销售数据<br>
     * 〈功能详细描述〉
     * 门店、门店-品类、店员维度查询实时数据存储于redis，mongodb正常来接推送过来的数据，用于每天最后一批次后的数据汇总入mysql做历史数据
     * 具体实现redis中分0~30和30~59两个时段存储两份数据，到对应时刻kafka推送数据过来，缓存时间设置失效于XX:45、XX:15
     * kafka在XX:00和XX:30推送数据，考虑到处理数据需要时间，顾综合考虑0~30时段的数据用于XX:10~XX:40查询，30~59时段的数据用于XX:40~XX:59，XX:00~XX:10查询
     * @param timeSale
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void dealKafkaRealTimeSale(List<Map<String, Object>> timeSale);
    
    /**
     * 
     * 功能描述: 门店日销售额<br>
     * 〈功能详细描述〉O
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryStoreDaySale(String storeCode);
    
    /**
     * 查询去年同期销售额
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryLastYearStoreSaleAmount(String storeCode);
    
    /**
     * 查询去年同期客单价
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryLastYearStoreCustAvgPrice(String storeCode);
    
    /**
     * 
     * 功能描述: 门店-品类日销售额<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryStoreCateDaySale(String storeCode, String cateCode);
    
    /**
     * 
     * 功能描述: 门店-品类日销售数量<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Integer queryStoreCateDaySaleVolume(String storeCode, String cateCode);
    
    /**
     * 
     * 功能描述: 店员日销售<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryStaffDaySale(String staffId);
    
    /**
     * 
     * 功能描述: 门店日销售同比<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryStoreDaySaleYoy(String storeCode);
    
    /**
     * 
     * 功能描述: 门店品类日销售同比<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryStoreCateDaySaleYoy(String storeCode, String cateCode);
    
    /**
     * 
     * 功能描述: 缓存持久化<br>
     * 〈功能详细描述〉
     *
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void perisitCacheSaleData();
    
    /**
     * 
     * 功能描述: 备份半点的实时销售数据<br>
     * 〈功能详细描述〉
     *
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    void copyHalfHourCacheSaleData();
    
    /**
     * 查询门店实时数据
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> getStoreSaleDataFromRedis(String storeCode);
    
    /**
     * 查询门店品类实时数据
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<Map<String, Object>> getStoreCateSaleDataFromRedis(String storeCode);
    
    /**
     * 
     * 功能描述: 查询门店某个具体品类实时数据<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> getStoreCateSaleDataFromRedis(String storeCode, String cateCode);
    
    /**
     * 查询门店品牌实时数据
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<Map<String, Object>> getStoreBrandSaleDataFromRedis(String storeCode);
    
    
    /**
     * 查询门店品牌实时数据
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<Map<String, Object>> getStoreBrandSaleDataByCateFromRedis(String storeCode,String cateCode);
    /**
     * 查询门店品类同期销量
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryLastYearStoreSaleVolume(String storeCode, String cateCode);
    
    /**
     * 
     * 功能描述: 门店品类销售额实时同比<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal getStoreCateSaleAmountYoy(String storeCode, String cateCode);
    
    /**
     * 
     * 功能描述: 门店品类客单价同比<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal getStoreCateCustAvgPriceYoy(String storeCode, String cateCode);
    
    /**
     * 查询门店品类同期销售额
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal queryLastYearStoreCateSaleAmount(String storeCode, String cateCode);
    
    /**
     * 
     * 功能描述: 查询去年门店的销售情况<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Map<String, Object> queryLastYearStoreSaleData(String storeCode);
	
	
    /**
     * 获取门店电器延保品类销售
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<Map<String, Object>> getStoreYbCateDataFromRedis(String storeCode);
    
    List<Map<String, Object>> getStoreYbStaffDataFromRedis(String storeCode,String cateCode);
    
    /**
     * 获取电器延保门店销售额
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal getStoreYbSaleFromRedis(String storeCode);

    /**
     * 获取门店某品类的销售
     *
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BigDecimal getStoreYbCateSaleFromRedis(String storeCode, String cateCode);

    Map<String, Object> getStoreYbStaffDataFromRedis(String storeCode, String cateCode, String staffId);

    Map<String, Object> queryLastYearStoreSaleAmountEx(String storeCode);

    Map<String, Object> queryLastYearStoreCateSaleAmountEx(String storeCode, String cateCode);

    List<Map<String, Object>> queryLastYearStoreSaleCateList(String storeCode);
}
